package com.config;

import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.filter.CharacterEncodingFilter;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;

import javax.servlet.Filter;

/**
 * 在Servlet2.5版本之前，web项目必须要有web.xml文件，
 * web.xml文件是web项目的核心配置文件，服务器启动会从web.xml文件中加载配置
 * ------------------
 * Servlet3.0之后，web项目可以没有web.xml文件，但是必须使用一个类继承
 * Servlet3.0提供了注解开发，当Tomcat服务器启动时，可以从一个核心配置类开始加载
 * 这个核心配置类必须实现指定接口
 * ===================
 * 此类为web项目的核心配置类，服务器启动时，Tomcat会从此类开始加载
 */
//AbstractAnnotationConfigDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类
//web容器配置类
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
    //加载Springmvc配置类，产生SpringMvc容器(本质还是Spring容器)
    protected WebApplicationContext createServletApplicationContext() {
        //ApplicationContext:解析完Spring的配置文件后，将Spring的一切都放到当前对象中
        //初始化WebApplicationContext对象
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(SpringMvcConfig.class);
        return ctx;
    }

    //设置哪些请求归属SpringMvc处理
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    //加载Spring容器配置类，产生Spring容器(本质还是Spring容器)
    protected WebApplicationContext createRootApplicationContext() {
        return null;
    }

    @Override
    protected Filter[] getServletFilters(){
        //Spring封装的过滤器，拦截所有的请求，如果是Post请求，就将编码修改为指定编码
        CharacterEncodingFilter filter = new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        return new Filter[]{filter};
    }
}
